package com.stt.videoprocess.design.processor.impl;

import com.stt.videoprocess.design.model.VideoTask;
import com.stt.videoprocess.design.processor.VideoProcessor;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * 组合处理器抽象类（组合模式）
 * 实现处理节点的统一管理
 */
@Slf4j
abstract class CompositeProcessor implements VideoProcessor {
    // 定义一个最终的处理器列表，用于存储视频处理器
    protected final List<VideoProcessor> processors = new ArrayList<>();

    /**
     * 添加视频处理器
     * @param processor 要添加的视频处理器实例
     */
    public void addProcessor(VideoProcessor processor) {
        processors.add(processor);
    }

    /**
     * 移除视频处理器
     * @param processor 要移除的视频处理器实例
     */
    public void removeProcessor(VideoProcessor processor) {
        processors.remove(processor);
    }

    // 抽象方法，需要由子类实现，用于处理视频任务
    @Override
    public abstract void process(VideoTask task) throws Exception;

    /**
     * 获取处理器的名称
     * @return 处理器的名称，这里返回"CompositeProcessor"
     */
    @Override
    public String getProcessorName() {
        return "CompositeProcessor";
    }
}